#include "set_operations.hpp"




bool IV_subseteq(IV arg1, IV arg2) 
{
	bool subset = true;
	
	/*
	 * for at subset==true, så skal arg2 være større end eller lige så stor som arg1
	 */
	
	for (IV::iterator it = arg1.begin(); it != arg1.end(); ++it) {
		const string& var = it->first;
		Interval& interv1 = it->second;

		bool var_found = (arg2.find(var) != arg2.end());
		if (!var_found) {
			subset = false;
			break;
		}
		
		Interval& interv2 = arg2[var];
		if (!::interval_subset(interv1, interv2)) {
			subset = false;
			break;
		}
	}
	
	return subset;
}

IV IV_union(IV arg1, IV arg2)
{
	IV ret = arg1;
		
	for (IV::iterator it = arg2.begin(); it != arg2.end(); ++it) {
		const string& var = it->first;
		Interval& interv2 = it->second;

		bool var_found = (arg1.find(var) != arg1.end());
		if (var_found) {
			// union af intervaller
			ret[var] = interval_union(ret[var], interv2);
		} else {
			ret.insert(*it);
		}
	}
	
	return ret;
}
